数据库迁移

概述

数据库迁移是管理和维护数据库结构变化的过程。在开发过程中,数据库结构可能会频繁变化,例如添加新表、修改字段、删除表等。数据库迁移工具允许开发者以版本控制的方式管理这些变化,确保开发、测试和生产环境的数据库结构一致。

在 Ruby 中,ActiveRecord 是 Ruby on Rails 框架中的一个组件,提供了强大的数据库迁移功能。本教程将详细介绍如何使用 ActiveRecord 进行数据库迁移。

1. 安装 Ruby 和 Rails

在开始之前,确保你已经安装了 Ruby 和 Rails。如果还没有安装,可以按照以下步骤进行安装:

安装 Ruby

# 使用 RVM (Ruby Version Manager) 安装 Ruby
\curl -sSL https://get.rvm.io | bash -s stable --ruby

# 安装完成后,加载 RVM
source ~/.rvm/scripts/rvm

# 查看已安装的 Ruby 版本
rvm list

# 安装特定版本的 Ruby
rvm install 3.0.0

# 设置默认 Ruby 版本
rvm use 3.0.0 --default

安装 Rails

# 使用 gem 安装 Rails
gem install rails

# 查看 Rails 版本
rails -v

2. 创建 Rails 项目

创建一个新的 Rails 项目,并初始化数据库:

# 创建一个新的 Rails 项目
rails new my_app

# 进入项目目录
cd my_app

# 初始化数据库
rails db:create

3. 生成迁移文件

Rails 提供了一个命令行工具 rails generate 来生成迁移文件。迁移文件通常用于创建、修改或删除数据库表和字段。

3.1 创建表

假设我们要创建一个名为 users 的表,包含 name 和 email 字段:

rails generate migration CreateUsers name:string email:string

这条命令会生成一个迁移文件,位于 db/migrate/ 目录下。文件名类似于 20230101000000_create_users.rb,其中 20230101000000 是时间戳。

3.2 修改表

假设我们要在 users 表中添加一个 age 字段:

rails generate migration AddAgeToUsers age:integer

这条命令会生成一个迁移文件,用于添加 age 字段到 users 表。

4. 编写迁移代码

生成的迁移文件包含一个 change 方法,用于定义数据库结构的变更。以下是 CreateUsers 迁移文件的示例:

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

在这个示例中,create_table 方法用于创建 users 表,并定义了 name 和 email 字段。t.timestamps 会自动添加 created_at 和 updated_at 字段。

5. 运行迁移

运行以下命令来执行迁移:

rails db:migrate

这条命令会执行所有未执行的迁移文件,并更新数据库结构。

6. 回滚迁移

如果需要撤销最近的迁移,可以使用以下命令:

rails db:rollback

这条命令会回滚最近的迁移,撤销对数据库结构的更改。

7. 实践练习

练习 1: 创建一个博客应用

  1. 创建一个新的 Rails 项目,命名为 blog_app。
  2. 生成一个 posts 表,包含 title 和 content 字段。
  3. 生成一个 comments 表,包含 content 和 post_id 字段。
  4. 运行迁移,创建这两个表。

练习 2: 修改表结构

  1. 在 posts 表中添加一个 published_at 字段,类型为 datetime。
  2. 在 comments 表中添加一个 author 字段,类型为 string。
  3. 运行迁移,更新表结构。

8. 总结

数据库迁移是管理和维护数据库结构变化的重要工具。通过使用 ActiveRecord 提供的迁移功能,开发者可以轻松地创建、修改和删除数据库表和字段,确保开发、测试和生产环境的数据库结构一致。

通过本教程,你应该已经掌握了如何使用 Rails 进行数据库迁移的基本操作。继续实践和探索,你将能够更熟练地管理复杂的数据库结构变化。